Skip to content

test: focus pytest summary on unexpected failures - #2203

Merged
Byron merged 2 commits into
gitpython-developers:mainfrom
raisulchowdhury:codex-1891-pytest-summary
Aug 4, 2026
Merged

test: focus pytest summary on unexpected failures#2203
Byron merged 2 commits into
gitpython-developers:mainfrom
raisulchowdhury:codex-1891-pytest-summary

Conversation

@raisulchowdhury

Copy link
Copy Markdown
Contributor

Summary

  • Use pytest failure/error summary modes instead of listing every expected failure.
  • Keep aggregate failure, error, xfail, and skip counts available while making unexpected failures prominent.

Fixes #1891

Validation

  • Reproduced the baseline and candidate output with an isolated pytest fixture containing one expected failure and one unexpected failure.
  • git diff --check

The full GitPython suite was not run because its setup script mutates repository branches, tags, and reflogs; the focused reporter fixture directly exercises this configuration change.

Assisted-by: OpenAI Codex. AI assistance was used for investigation and implementation; the submitted diff and validation were reviewed before publication.

Use pytest's failure and error summary modes so expected-failure details do not obscure unexpected failures while retaining aggregate counts.

Assisted-by: OpenAI Codex
Signed-off-by: raisulchowdhury <34920788+raisulchowdhury@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 1, 2026 05:09

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the project’s pytest default options to reduce verbose reporting of expected failures (xfail) so CI output makes unexpected failures easier to spot, addressing #1891.

Changes:

  • Switch pytest “extra summary” flags from -ra (all non-passing, including xfail details) to -rfE (failures + errors only).
  • Adjust the inline comment describing the summary mode.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pyproject.toml Outdated
Comment thread pyproject.toml Outdated

@Byron Byron left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

I do, however, think that the copilot comment should be looked into.

Include XPASS results while still omitting expected-failure detail, and document the exact report flags.\n\nAssisted-by: OpenAI Codex

Signed-off-by: raisulchowdhury <34920788+raisulchowdhury@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 1, 2026 14:42
@raisulchowdhury

Copy link
Copy Markdown
Contributor Author

Addressed the review request in commit 1d246f0:

  • Changed the report flags from -rfE to -rfEX so non-strict XPASS results remain visible while expected-failure details stay suppressed.
  • Updated the inline comment to describe the exact flags.
  • Rechecked the focused pytest reporter fixture with failed, xfailed, and xpassed cases.

Assisted-by: OpenAI Codex. The change and validation were reviewed before pushing.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@raisulchowdhury

Copy link
Copy Markdown
Contributor Author

The Copilot points are addressed in 1d246f0: the report now uses -rfEX, and the inline comment documents the exact flags and their behavior. Both inline threads are now outdated. Could you re-review the updated commit when convenient?

@Byron

Byron commented Aug 4, 2026

Copy link
Copy Markdown
Member

This is how it looks now towards the end:

test/test_util.py::TestCygpath::test_cygpath_invalids[\\\\share\\a:rel] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[foo\\bar-foo/bar] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[foo/bar-foo/bar] SKIPPED  [ 96%]
test/test_util.py::TestCygpath::test_decygpath[C:\\Users-/cygdrive/c/Users] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[C:\\d/e-/cygdrive/c/d/e] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[C:\\-/cygdrive/c/] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\C$\\Users-//server/C$/Users] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\C$-//server/C$] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\c$\\-//server/c$/] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\BAR/-//server/BAR/] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[D:/Apps-/cygdrive/d/Apps] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[D:/Apps\\fOO-/cygdrive/d/Apps/fOO] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[D:\\Apps/123-/cygdrive/d/Apps/123] SKIPPED [ 97%]
test/test_util.py::TestIsCygwinGit::test_on_path_executable PASSED       [ 97%]
test/test_util.py::TestIsCygwinGit::test_none_executable PASSED          [ 97%]
test/test_util.py::TestIsCygwinGit::test_with_missing_uname PASSED       [ 97%]
test/test_util.py::TestUtils::test_actor PASSED                          [ 98%]
test/test_util.py::TestUtils::test_actor_from_string PASSED              [ 98%]
test/test_util.py::TestUtils::test_actor_get_uid_laziness_called PASSED  [ 98%]
test/test_util.py::TestUtils::test_actor_get_uid_laziness_not_called PASSED [ 98%]
test/test_util.py::TestUtils::test_altz_to_utctz_str PASSED              [ 98%]
test/test_util.py::TestUtils::test_blocking_lock_file PASSED             [ 98%]
test/test_util.py::TestUtils::test_from_timestamp PASSED                 [ 98%]
test/test_util.py::TestUtils::test_it_should_dashify PASSED              [ 98%]
test/test_util.py::TestUtils::test_iterable_list_1___name______ PASSED   [ 99%]
test/test_util.py::TestUtils::test_iterable_list_2___name____prefix___ PASSED [ 99%]
test/test_util.py::TestUtils::test_lock_file PASSED                      [ 99%]
test/test_util.py::TestUtils::test_parse_date PASSED                     [ 99%]
test/test_util.py::TestUtils::test_pickle_tzoffset PASSED                [ 99%]
test/test_util.py::TestUtils::test_remove_password_from_command_line PASSED [ 99%]
test/test_util.py::TestUtils::test_user_id PASSED                        [ 99%]
test/test_util.py::TestUtils::test_utctz_to_altz PASSED                  [100%]

=============================== warnings summary ===============================
test/test_submodule.py::TestSubmodule::test_add_does_not_expand_environment_variables_in_url
  /home/runner/work/GitPython/GitPython/git/repo/base.py:257: UserWarning: The use of environment variables in paths is deprecated
  for security reasons and may be removed in the future!!
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================ tests coverage ================================
_______________ coverage: platform linux, python 3.11.15-final-0 _______________

Name                                Stmts   Miss  Cover
-------------------------------------------------------
git/__init__.py                        49      5    90%
git/cmd.py                            651     62    90%
git/compat.py                          50     15    70%
git/config.py                         489     45    91%
git/db.py                              24      0   100%
git/diff.py                           296      3    99%
git/exc.py                             64      2    97%
git/index/__init__.py                   3      0   100%
git/index/base.py                     532     49    91%
git/index/fun.py                      200      6    97%
git/index/typ.py                       83      2    98%
git/index/util.py                      50      1    98%
git/objects/__init__.py                 7      0   100%
git/objects/base.py                    84      3    96%
git/objects/blob.py                    21      1    95%
git/objects/commit.py                 337     25    93%
git/objects/fun.py                     92      1    99%
git/objects/submodule/__init__.py       3      0   100%
git/objects/submodule/base.py         607     37    94%
git/objects/submodule/root.py         133     10    92%
git/objects/submodule/util.py          44      3    93%
git/objects/tag.py                     43      8    81%
git/objects/tree.py                   150     26    83%
git/objects/util.py                   211     15    93%
git/refs/__init__.py                    7      0   100%
git/refs/head.py                       93      3    97%
git/refs/log.py                       145      7    95%
git/refs/reference.py                  54      2    96%
git/refs/remote.py                     31      0   100%
git/refs/symbolic.py                  398     17    96%
git/refs/tag.py                        47      2    96%
git/remote.py                         452     51    89%
git/repo/__init__.py                    2      0   100%
git/repo/base.py                      613     27    96%
git/repo/fun.py                       422     83    80%
git/types.py                           61      5    92%
git/util.py                           562    129    77%
-------------------------------------------------------
TOTAL                                7110    645    91%
====== 710 passed, 73 skipped, 1 xfailed, 1 warning in 112.18s (0:01:52) =======

This is how it looked before:

test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-None-True] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS--False] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS- -False] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-0-False] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-1-True] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-false-False] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-true-True] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-False-False] SKIPPED [ 89%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-True-True] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-no-False] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-yes-True] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-NO-False] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS-YES-True] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS- no  -False] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_KNOWN_ERRORS- yes  -True] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-None-True] SKIPPED [ 90%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS--False] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS- -False] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-0-False] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-1-True] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-false-False] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-true-True] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-False-False] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-True-True] SKIPPED [ 91%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-no-False] SKIPPED [ 92%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-yes-True] SKIPPED [ 92%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-NO-False] SKIPPED [ 92%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS-YES-True] SKIPPED [ 92%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS- no  -False] SKIPPED [ 92%]
test/test_util.py::TestEnvParsing::test_env_vars_for_windows_tests[HIDE_WINDOWS_FREEZE_ERRORS- yes  -True] SKIPPED [ 92%]
test/test_util.py::TestCygpath::test_cygpath_ok[foo\\bar-foo/bar] SKIPPED [ 92%]
test/test_util.py::TestCygpath::test_cygpath_ok[foo/bar-foo/bar] SKIPPED [ 92%]
test/test_util.py::TestCygpath::test_cygpath_ok[C:\\Users-/cygdrive/c/Users] SKIPPED [ 93%]
test/test_util.py::TestCygpath::test_cygpath_ok[C:\\d/e-/cygdrive/c/d/e] SKIPPED [ 93%]
test/test_util.py::TestCygpath::test_cygpath_ok[C:\\-/cygdrive/c/] SKIPPED [ 93%]
test/test_util.py::TestCygpath::test_cygpath_ok[\\\\server\\C$\\Users-//server/C$/Users] SKIPPED [ 93%]
test/test_util.py::TestCygpath::test_cygpath_ok[\\\\server\\C$-//server/C$] SKIPPED [ 93%]
test/test_util.py::TestCygpath::test_cygpath_ok[\\\\server\\c$\\-//server/c$/] SKIPPED [ 93%]
test/test_util.py::TestCygpath::test_cygpath_ok[\\\\server\\BAR/-//server/BAR/] SKIPPED [ 93%]
test/test_util.py::TestCygpath::test_cygpath_ok[D:/Apps-/cygdrive/d/Apps] SKIPPED [ 94%]
test/test_util.py::TestCygpath::test_cygpath_ok[D:/Apps\\fOO-/cygdrive/d/Apps/fOO] SKIPPED [ 94%]
test/test_util.py::TestCygpath::test_cygpath_ok[D:\\Apps/123-/cygdrive/d/Apps/123] SKIPPED [ 94%]
test/test_util.py::TestCygpath::test_cygpath_ok[\\\\?\\a:\\com-/cygdrive/a/com] SKIPPED [ 94%]
test/test_util.py::TestCygpath::test_cygpath_ok[\\\\?\\a:/com-/cygdrive/a/com] SKIPPED [ 94%]
test/test_util.py::TestCygpath::test_cygpath_ok[\\\\?\\UNC\\server\\D$\\Apps-//server/D$/Apps] SKIPPED [ 94%]
test/test_util.py::TestCygpath::test_cygpath_norm_ok[./bar-bar] SKIPPED  [ 94%]
test/test_util.py::TestCygpath::test_cygpath_norm_ok[.\\bar-bar] SKIPPED [ 94%]
test/test_util.py::TestCygpath::test_cygpath_norm_ok[../bar-../bar] SKIPPED [ 95%]
test/test_util.py::TestCygpath::test_cygpath_norm_ok[..\\bar-../bar] SKIPPED [ 95%]
test/test_util.py::TestCygpath::test_cygpath_norm_ok[../bar/.\\foo/../chu-../bar/chu] SKIPPED [ 95%]
test/test_util.py::TestCygpath::test_cygpath_invalids[C:] SKIPPED (Paths
specifically for Cygwin.)                                                [ 95%]
test/test_util.py::TestCygpath::test_cygpath_invalids[C:Relative] SKIPPED [ 95%]
test/test_util.py::TestCygpath::test_cygpath_invalids[D:Apps\\123] SKIPPED [ 95%]
test/test_util.py::TestCygpath::test_cygpath_invalids[D:Apps/123] SKIPPED [ 95%]
test/test_util.py::TestCygpath::test_cygpath_invalids[\\\\?\\a:rel] SKIPPED [ 95%]
test/test_util.py::TestCygpath::test_cygpath_invalids[\\\\share\\a:rel] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[foo\\bar-foo/bar] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[foo/bar-foo/bar] SKIPPED  [ 96%]
test/test_util.py::TestCygpath::test_decygpath[C:\\Users-/cygdrive/c/Users] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[C:\\d/e-/cygdrive/c/d/e] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[C:\\-/cygdrive/c/] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\C$\\Users-//server/C$/Users] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\C$-//server/C$] SKIPPED [ 96%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\c$\\-//server/c$/] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[\\\\server\\BAR/-//server/BAR/] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[D:/Apps-/cygdrive/d/Apps] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[D:/Apps\\fOO-/cygdrive/d/Apps/fOO] SKIPPED [ 97%]
test/test_util.py::TestCygpath::test_decygpath[D:\\Apps/123-/cygdrive/d/Apps/123] SKIPPED [ 97%]
test/test_util.py::TestIsCygwinGit::test_on_path_executable PASSED       [ 97%]
test/test_util.py::TestIsCygwinGit::test_none_executable PASSED          [ 97%]
test/test_util.py::TestIsCygwinGit::test_with_missing_uname PASSED       [ 97%]
test/test_util.py::TestUtils::test_actor PASSED                          [ 98%]
test/test_util.py::TestUtils::test_actor_from_string PASSED              [ 98%]
test/test_util.py::TestUtils::test_actor_get_uid_laziness_called PASSED  [ 98%]
test/test_util.py::TestUtils::test_actor_get_uid_laziness_not_called PASSED [ 98%]
test/test_util.py::TestUtils::test_altz_to_utctz_str PASSED              [ 98%]
test/test_util.py::TestUtils::test_blocking_lock_file PASSED             [ 98%]
test/test_util.py::TestUtils::test_from_timestamp PASSED                 [ 98%]
test/test_util.py::TestUtils::test_it_should_dashify PASSED              [ 98%]
test/test_util.py::TestUtils::test_iterable_list_1___name______ PASSED   [ 99%]
test/test_util.py::TestUtils::test_iterable_list_2___name____prefix___ PASSED [ 99%]
test/test_util.py::TestUtils::test_lock_file PASSED                      [ 99%]
test/test_util.py::TestUtils::test_parse_date PASSED                     [ 99%]
test/test_util.py::TestUtils::test_pickle_tzoffset PASSED                [ 99%]
test/test_util.py::TestUtils::test_remove_password_from_command_line PASSED [ 99%]
test/test_util.py::TestUtils::test_user_id PASSED                        [ 99%]
test/test_util.py::TestUtils::test_utctz_to_altz PASSED                  [100%]

=============================== warnings summary ===============================
test/test_submodule.py::TestSubmodule::test_add_does_not_expand_environment_variables_in_url
  /home/runner/work/GitPython/GitPython/git/repo/base.py:257: UserWarning: The use of environment variables in paths is deprecated
  for security reasons and may be removed in the future!!
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================ tests coverage ================================
________________ coverage: platform linux, python 3.15.0-beta-4 ________________

Name                                Stmts   Miss  Cover
-------------------------------------------------------
git/__init__.py                        49      5    90%
git/cmd.py                            651     62    90%
git/compat.py                          50     15    70%
git/config.py                         489     45    91%
git/db.py                              24      0   100%
git/diff.py                           295      3    99%
git/exc.py                             64      2    97%
git/index/__init__.py                   3      0   100%
git/index/base.py                     532     49    91%
git/index/fun.py                      200      6    97%
git/index/typ.py                       79      2    97%
git/index/util.py                      50      1    98%
git/objects/__init__.py                 7      0   100%
git/objects/base.py                    84      3    96%
git/objects/blob.py                    21      1    95%
git/objects/commit.py                 336     25    93%
git/objects/fun.py                     92      1    99%
git/objects/submodule/__init__.py       3      0   100%
git/objects/submodule/base.py         620     37    94%
git/objects/submodule/root.py         133     10    92%
git/objects/submodule/util.py          44      3    93%
git/objects/tag.py                     43      8    81%
git/objects/tree.py                   150     26    83%
git/objects/util.py                   208     15    93%
git/refs/__init__.py                    7      0   100%
git/refs/head.py                       93      3    97%
git/refs/log.py                       145      7    95%
git/refs/reference.py                  54      2    96%
git/refs/remote.py                     31      0   100%
git/refs/symbolic.py                  398     17    96%
git/refs/tag.py                        47      2    96%
git/remote.py                         451     51    89%
git/repo/__init__.py                    2      0   100%
git/repo/base.py                      613     27    96%
git/repo/fun.py                       422     83    80%
git/types.py                           49      5    90%
git/util.py                           561    129    77%
-------------------------------------------------------
TOTAL                                7100    645    91%
=========================== short test summary info ============================
SKIPPED [1] test/test_clone.py:97: The referenced repository was removed, and one needs to set up a new
        password controlled repo under the org's control.
SKIPPED [1] test/test_config.py:91: Known failure -- included values are not in effect right away
SKIPPED [1] test/test_git.py:369: The regression only affected Windows, and this test logic is OS-specific.
SKIPPED [1] test/test_submodule.py:1294: Specifically for Windows.
SKIPPED [1] test/test_util.py:176: PermissionError is only ever wrapped on Windows
SKIPPED [30] test/test_util.py:241: These environment variables are only used on Windows.
SKIPPED [15] test/test_util.py:336: Paths specifically for Cygwin.
SKIPPED [5] test/test_util.py:341: Paths specifically for Cygwin.
SKIPPED [6] test/test_util.py:355: Paths specifically for Cygwin.
SKIPPED [12] test/test_util.py:370: Paths specifically for Cygwin.
XFAIL test/test_submodule.py::TestSubmodule::test_depth - for some unknown reason the assertion fails, even though it in fact is working in more common setup
======= 711 passed, 73 skipped, 1 xfailed, 1 warning in 98.03s (0:01:38) =======

So it's pretty much the same for the common case, but… let's try it out more to see if some of my confusion when looking at errors in particular will be reduced.

@Byron
Byron merged commit 2bb0791 into gitpython-developers:main Aug 4, 2026
48 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

Detailed xfail output sometimes distracts from unexpected failures

3 participants